#ifndef ISP_PIPELINE_H
#define ISP_PIPELINE_H

#include <opencv2/opencv.hpp>
#include <string>
#include <map>

class ISP_Pipeline {
public:
    // 构造函数，加载配置
    explicit ISP_Pipeline(const std::string& config_path);
    // 处理 RAW 图像
    void process();
    // 保存处理后的图像
    void saveOutput(const std::string& output_path);

private:
    // 从配置文件加载参数
    void loadConfig(const std::string& config_path);
    // RAW 域处理
    void blackLevelCalibration(cv::Mat& raw_image);
    void rawNoiseReduction(cv::Mat& raw_image);
    // 镜头阴影校准
    void lensShadingCorrection(cv::Mat& raw_image);
    // 动态坏点校准
    void dynamicPixelCorrection(cv::Mat& raw_image);
    // Demosaicing (去马赛克)
    void demosaicing(cv::Mat& raw_image);
    // 白平衡调整
    void whiteBalance(cv::Mat& image);
    // 伽马校正
    void gammaCorrection(cv::Mat& image);
    // RGB 转 YUV
    void rgbToYuv(cv::Mat& image);
    // YUV 域处理
    void contrastEnhancement(cv::Mat& image);
    void sharpen(cv::Mat& image);

    // 配置参数
    std::map<std::string, std::string> config;
    std::string input_path, output_path;
    int width, height;
    std::string cfa_pattern;
    double white_balance_r, white_balance_b;
    std::string demosaicing_method;
    double gamma;
    int blc_value;
    int dpc_threshold; // 坏点校准阈值
    double lsc_intensity; // 镜头阴影校准强度

    // 处理后的图像
    cv::Mat processed_image;
};

#endif // ISP_PIPELINE_H